package util.concurrent;

/**
 * @author Khai Loon
 * @since 2018/5/16
 * <p>
 * <p>
 * synchronized依靠"锁"机制进行多线程同步，"锁"有2种，一种是对象锁，一种是类锁。
 * <p>
 * synchronized void method{}功能上，等效于
 * void method{
 * synchronized(this) {
 * 　　　　...
 * }
 * }
 * <p>
 * <p>
 * synchronized ｛static方法}此代码块等效于
 * void method{
 * synchronized(Obl.class)
 * }
 * }
 *
 *
 * 情况1: 同一个对象调用 静态 和 非静态 方法
 * 情况2：
 */
public class Synchronized_ {

    public synchronized void get() {
        for (int i = 0; i <= 10; i++) {
            try {
                System.out.println("get");
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }

        }
    }

    public static synchronized void run() {

        for (int i = 0; i <= 10; i++) {
            try {
                System.out.println("run");
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }

        }
    }

    public static void main(String[] args) {
        Synchronized_ sy = new Synchronized_();
        new Thread(() -> sy.get()).start();
        new Thread(() -> sy.run()).start();
    }
}
